#ifndef __WS2812_H
#define __WS2812_H
#include "at32f421_wk_config.h"
#include "stdio.h"
#include "stdint.h"

// ====================
// 硬件相关配置定义
// ====================

/* WS2812数据位时序定义 */
#define RGB_led_bit_1       112  // 逻辑"1"的PWM比较值
#define RGB_led_bit_0       37   // 逻辑"0"的PWM比较值

/* LED灯带配置 */
#define led_data_length     24   // 每个LED需要24位数据(GRB各8位)
#define RGB_PIXEL_NUM       24   // 最大支持LED数量

// ====================
// 数据结构定义
// ====================

/**
 * [url=home.php?mod=space&uid=247401]@brief[/url] WS2812数据缓冲区的联合体定义
 * 
 * 使用二维数组存储所有LED的24位数据:
 * - 第一维: LED索引(0~RGB_PIXEL_NUM-1)
 * - 第二维: 24位数据(8位G + 8位R + 8位B)
 */
typedef union _rgbPixelBuffer {
    uint16_t All_Buffer[RGB_PIXEL_NUM][led_data_length];
} RGB_PixelBuffer, *PRGB_PixelBuffer;

// ====================
// 全局变量声明
// ====================

extern RGB_PixelBuffer RGB_Buffer;  // 全局数据缓冲区

// ====================
// 函数声明
// ====================

void WS2812_Update(void);
void RGB_Write_Led_Bit(uint32_t RGB, uint16_t Index);
void RGB_Write_Led_Bit_AllLedSame(uint32_t RGB, uint16_t numLeds);

void Flowing_Gradient_Effect(uint16_t numLeds);

#endif /* __WS2812_H */
